#include <iostream>
#include <cstring>
using namespace std;

const int N = 40010; //点最多的多少

int n, m;
int p[N]; //并查集
int x, y;
char op; //获取指令

int find(int x)
{
    if (x == p[x])            //如果已经到根节点了
        return x;             //那我就直接返回我自己
    return p[x] = find(p[x]); //否则就让我爸爸去找他的爸爸，最后我们一起认祖宗(路径压缩)
}

int main()
{
    for (int i = 0; i < N; ++i)
        p[i] = i;                //先初始化，我就是我自己的爸爸
    cin >> n >> m;               //确定点数和指令数
    for (int i = 1; i <= m; ++i) //逐个输入指令
    {
        cin >> x >> y >> op;
        if (op == 'D') //向下
        {
            x = x * n + y;          //二维数组一维化
            y = x + n;              //因为是向下，所以正好多一行
            if (find(x) == find(y)) //如果这俩本来就有一条线连着，这俩再连着就是成环了
            {
                cout << i; //所以这一步游戏结束
                return 0;
            }
            p[p[x]] = p[y]; //不然就将这俩并起来
        }
        else //不然就是向右
        {
            x = x * n + y;          //二维数组一维化
            y = x + 1;              //因为是向右，所以正好多一列
            if (find(x) == find(y)) //如果这俩本来就有一条线连着，这俩再连着就是成环了
            {
                cout << i; //所以这一步游戏结束
                return 0;
            }
            p[p[x]] = p[y]; //不然就将这俩并起来
        }
    }
    cout << "draw"; //不然就是继续
    return 0;
}